( line )
Recognize the <shape> characters and keywords.
( @*shapechar@@@#1@#1@@@*shapechar@<@#1@#1@@@*shapechar@*@#1@#1@@
@*shape@left@@left@ @*shape@right@@right@ @*shape@flip@@flip@ @*shape@halfsize@@halfsize@ @*shape@dblsize@@dblsize@ @*shape@vflip@@vflip@ @*shape@hflip@@hflip@
@@@shearing )
2 Each style modifier adds code to one, or both, of two global lists. These contents of these lists, called |@@ | and |@@ |. An implementation must define macros which are to be bound to the control sequence names |@| and |@|, which are prepended and appended to the |@@| and |Connect@@| methods for the current <object>.
Also |@@| and |@@| must be modified, if this has not already been done as indicated by |@transform@| having expansion ||.
( @@ @@
@@ @@ @@transform@ @@@ @@@ )
The transformations must be implemented by emulating the adjoint coordinate transformations. This requires that code be added to |preXYtransform@@| in reverse order to the order of occurrence of the <shape> modifiers. The code is added to |@@ | in natural order, so that each addition to |@@ | can be closed off, if necessary, in a correctly nested sequence.
( @@ @transform@@@ @##1@@@@##1@@@ @##1@@@@##1@@
@@@transform@=
@@ )
: The reference point does not move correctly in when a shift modifier has been applied before a rotation. The object prints outside of its bounding ||. Fix this!!
Global macros are used, so that the same styles can be reused by successive objects without having to re-interpret <shape> modifiers, as described next.
2